free trans if allocated, if dev_request_and_reply fail.
authorvhanquez@kneesa.uk.xensource.com <vhanquez@kneesa.uk.xensource.com>
Mon, 9 Jan 2006 13:11:55 +0000 (13:11 +0000)
committervhanquez@kneesa.uk.xensource.com <vhanquez@kneesa.uk.xensource.com>
Mon, 9 Jan 2006 13:11:55 +0000 (13:11 +0000)
Signed-off-by: Vincent Hanquez <vincent@xensource.com>
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_dev.c

index e175b4e9ead5e5751ba813e74539f35cdc8395f5..b7a7d892f59e70fb83a039a85018d58c25d597d6 100644 (file)
@@ -109,7 +109,7 @@ static ssize_t xenbus_dev_write(struct file *filp,
                                size_t len, loff_t *ppos)
 {
        struct xenbus_dev_data *u = filp->private_data;
-       struct xenbus_dev_transaction *trans;
+       struct xenbus_dev_transaction *trans = NULL;
        void *reply;
 
        if ((len + u->len) > sizeof(u->u.buffer))
@@ -141,8 +141,10 @@ static ssize_t xenbus_dev_write(struct file *filp,
                }
 
                reply = xenbus_dev_request_and_reply(&u->u.msg);
-               if (IS_ERR(reply))
+               if (IS_ERR(reply)) {
+                       kfree(trans);
                        return PTR_ERR(reply);
+               }
 
                if (u->u.msg.type == XS_TRANSACTION_START) {
                        trans->handle = (struct xenbus_transaction *)